// SessionId，保持上下文使用，假如页面存在重置等动作，则重新生成新的sessionId
const SessionId = uuid();

// 渲染对话页面
window.bot = new window.ChatSDK({
    root: document.querySelector('#root'),
    config: {
        navbar: {
            title: '智能助理',
        },
        robot: {
            avatar: 'https://gw.alicdn.com/tfs/TB1U7FBiAT2gK0jSZPcXXcKkpXa-108-108.jpg',
        },
        messages: [
            {
                type: 'text',
                content: {
                    text: '智能助理为您服务，请问有什么可以帮您？',
                },
            },
        ],
        // 快捷短语
        quickReplies: [
            { name: 'hello' },
            { name: '你是谁' },
            { name: '快捷短语' },
        ],
        // 输入框占位符
        placeholder: '输入任何您想问的问题',

    },
    requests: {
        send(msg) {
            // 把uuid当消息id传到服务端
            const msgId = uuid();
            send(msg.content.text, msgId);
        },
    },

});

async function send(text, msgId) {
    window.ChatSSE.fetchEventSource('http://localhost:9000/chat/ai?query='+text+'&msgId='+msgId, {
        method: 'GET',
        headers: {
            'Content-Type': 'application/json',
        },

        onmessage(msg) {
            // if the server emits an error message, throw an exception
            // so it gets handled by the onerror callback below:
            const dataMsg =  convertToMessageObjectMarkdown(msg.data);
            // 更新消息
            window.bot.updateOrAppendMessage(dataMsg);
        }
    });
}

// 将 DeepSeek 响应转换为 Message 对象的函数
function convertToMessageObject(responseData) {
    // 假设 responseData 是 deepseek 返回的数据结构
    if (responseData) {
        const data = JSON.parse(responseData);

        // 提取所需字段并构建 Message 对象
        const messageObject = {
            // 注意要更新消息必须有消息id，每次发起调用传到服务端
            _id: data.msg_id,
            id: data.msg_id,
            type: 'text', // 类型
            content: {
                text: data.response.replace(/\\u003c/g, '<').replace(/\\u003e/g, '>') // 替换转义字符
            },
            createdAt: Date.parse(data.created_at), // 转换时间为时间戳
            user: {
                avatar: '//gw.alicdn.com/tfs/TB1U7FBiAT2gK0jSZPcXXcKkpXa-108-108.jpg' // 示例头像
            },
            position: 'left', // 显示位置
            hasTime: true // 是否显示时间
        };
        console.log(messageObject);
        return messageObject;
    } else {
        console.warn('响应数据格式不符合预期:', responseData);
        return null;
    }
}


// 将 DeepSeek 响应转换为 Message 对象的函数
function convertToMessageObjectMarkdown(responseData) {
    // 假设 responseData 是 deepseek 返回的数据结构
    if (responseData) {
        const data = JSON.parse(responseData);

        // 提取所需字段并构建 Message 对象
        const messageObject = {
            _id: data.msg_id,
            id: data.msg_id,
            code: 'markdown', // 类型
            data: {
                //text: data.response.replace(/\\u003c/g, '<').replace(/\\u003e/g, '>') // 替换转义字符
                text: data.response
            },
            createdAt: Date.parse(data.created_at), // 转换时间为时间戳
            user: {
                avatar: '//gw.alicdn.com/tfs/TB1U7FBiAT2gK0jSZPcXXcKkpXa-108-108.jpg' // 示例头像
            },
            position: 'left', // 显示位置
            hasTime: true // 是否显示时间
        };
        console.log(messageObject);
        return messageObject;
    } else {
        console.warn('响应数据格式不符合预期:', responseData);
        return null;
    }
}

// 聊天窗渲染
window.bot.run();

function uuid() {
    const temp_url = URL.createObjectURL(new Blob());
    const uuid = temp_url.toString(); // blob:https://xxx.com/b250d159-e1b6-4a87-9002-885d90033be3
    URL.revokeObjectURL(temp_url);
    return uuid.substr(uuid.lastIndexOf('/') + 1);
}